home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
vdl020d.zip
/
VSERLOW.DOC
< prev
next >
Wrap
Text File
|
1993-04-14
|
11KB
|
285 lines
{
════════════════════════════════════════════════════════════════════════════
Visionix Serial Communictions LOW Unit (VSER)
Copyright 1991,92,93 Visionix
ALL RIGHTS RESERVED
────────────────────────────────────────────────────────────────────────────
revision history in reverse chronological order:
Initials Date Comment
──────── ──────── ────────────────────────────────────────────────────────
lpg 03/16/93 Added Source Documentation
mep 02/11/93 Cleaned up code for beta release
jrt 02/08/93 Sync with beta 0.12 release
jrt 11/21/92 Sync with beta 0.08
jrt 09/01/92 First logged revision.
────────────────────────────────────────────────────────────────────────────
}
Unit VSerLow;
CONST
{-------------------------}
{ Serial Driver Functions }
{-------------------------}
sdfDriverNew = 1;
sdfDriverOff = 2;
sdfDriverOn = 3;
sdfDriverDispose = 4;
sdfActivatePort = 5;
sdfDeActivatePort = 6;
sdfSetCommParam = 7;
sdfGetCommParam = 8;
sdfGetFlowConType = 9;
sdfSetFlowConType = 10;
sdfTurnSendOnOff = 11;
sdfTurnReceiveOnOff = 12;
sdfBreakOnOff = 13;
sdfDTROnOff = 14;
sdfGetStatus = 15;
sdfFlushOutBuff = 16;
sdfPurgeOutBuff = 17;
sdfPurgeInBuff = 18;
sdfEventProcNew = 19;
sdfEventProcOff = 20;
sdfEventProcOn = 21;
sdfEventProcDispose = 22;
sdfWriteCh = 23;
sdfWriteBlock = 24;
sdfReadCh = 25;
sdfReadBlock = 26;
{-------------------------}
{----------------------------------------}
{ Modem Status Register status bits (AL) }
{----------------------------------------}
MSRctsDelta = $01; { Clear To Send changed }
{ Delta CTS - not reliable }
MSRdsrDelta = $02; { Data Set Ready changed }
{ Delta DSR - not reliable }
MSRriDelta = $04; { Ring Indicate changed }
{ Delta DCD - not reliable }
MSRcdDelta = $08; { Carrier Detect changed }
{ always set to 1 upon return (DUMMY DCD) }
MSRcts = $10; { Clear To Send }
{ CTS - DCE sets - do not xmit until true }
MSRdsr = $20; { Data Set Ready }
{ DSR - modem is ready to be used }
MSRri = $40; { Ring Indicate }
{ RI - only on during active voltage signal }
MSRcd = $80; { Carrier Detect }
{ DCD - data carrier detect }
{---------------------------------------}
{ Line Status Register status bits (AH) }
{---------------------------------------}
LSRRcvReady = $01; { Received data ready }
{ RDA - input data is available in buffer }
LSROverrun = $02; { OverRun error }
{ OVRN - the input buffer has been overrun }
LSRParity = $04; { Parity error }
{ Reserved (Parity error in BIOS INT 14h) }
LSRFrame = $08; { Framing error }
{ Reserved (Framing error in BIOS INT 14h) }
LSRBreak = $10; { Break detected }
{ Reserved (Break detect in BIOS INT 14h) }
LSRXhReady = $20; { Transmit hold register empty }
{ THRE - room is available in output buffer }
LSRXsReady = $40; { Transmit shift register empty }
{ TSRE - output buffer is empty }
LSRTimeout = $80; { Timeout (software implemented). If true, }
{ then none of the above 15 bits are valid. }
{-----------------------------}
{ Modem Control Register bits }
{-----------------------------}
MCRDtr = $1; { Data terminal ready }
MCRRts = $2; { Request to send }
MCROut1 = $4; { Out1: software implemented output }
MCROut2 = $8; { Out2: as Out1 with interrupts to system-bus }
MCRLoop = $10;{ Loopback test mode }
{----------------------------}
{ Line Control Register bits }
{----------------------------}
LCRdatabits = $1; { Bits/character (databits) - bits 1-0 }
LCRstopbits = $4; { Stop bits of character }
LCRparity = $8; { Parity - bits 5-3 }
LCRbreak = $20;{ Enable break status }
LCRdivisor = $40;{ Enable addressing of baudrate divisor registers }
{----------------------------------------}
{ Interrupt Identification Register bits }
{----------------------------------------}
IIRReady = $1; { Interrupt waiting status }
{---------------------------}
{ Interrupt Enable Register }
{---------------------------}
IEREnabRE = $1; { Enable read (receive data) interrupt status }
IEREnabWI = $2; { Enable write (transmit empty) register interrupt }
IEREnabLSR = $4; { Enable line status interrupt }
IEREnabMSR = $8; { Enable delta modem status interrupt }
{------------------------------------------------------}
{ Serial Registers - These are the offsets from IOPort }
{------------------------------------------------------}
DLL = 0; { Divisor Latch Least-significant-byte (LCR bit $80 on) }
DLM = 1; { Divisor Latch Most-significant-byte (LCR bit $80 on) }
RBR = 0; { Receiver Buffer Register (read) }
THR = 0; { Transmitter Holding Register (write) }
IER = 1; { Interrupt Enable Register }
IIR = 2; { Interrupt Identification Register (read only) }
LCR = 3; { Line Control Register }
MCR = 4; { Modem Control Register (see above) }
LSR = 5; { Line Status Register (see above) }
MSR = 6; { Modem Status Register (see above) }
SPR = 7; { 8250 Scratch Pad Register }
{------------------------}
{ MISCELLANOUS CONSTANTS }
{------------------------}
IMR = $21; { Port address of the Interrupt Mask Register }
NUL = #0; {^@} SOH = #1; {^A} STX = #2; {^B}
ETX = #3; {^C} EOT = #4; {^D} ENQ = #5; {^E}
ACK = #6; {^F} BEL = #7; {^G} BS = #8; {^H}
HT = #9; {^I} LF = #10; {^J} VT = #11; {^K}
FF = #12; {^L} CR = #13; {^M} SO = #14; {^N}
SI = #15; {^O} DLE = #16; {^P} DC1 = #17; {^Q}
DC2 = #18; {^R} DC3 = #19; {^S} DC4 = #20; {^T}
NAK = #21; {^U} SYN = #22; {^V} ETB = #23; {^W}
CAN = #24; {^X} EM = #25; {^Y} SUB = #26; {^Z}
ESC = #27; FS = #28; {^\} GS = #29; {^`}
RS = #30; {^=} US = #31; {^-} SP = #32;
DEL = #127; BLANK = #255;
Type
PCommParam = ^TCommParam;
TCommParam = RECORD
ComPort : BYTE;
BaudRate : LONGINT;
Parity : CHAR;
DataBits : BYTE;
StopBits : BYTE;
Break : BOOLEAN;
END;
PSerDriverPacket = ^TSerDriverPacket;
TSerDriverProc = Procedure( SDPacket : PSerDriverPacket );
PSerDriverProc = ^TSerDriverProc;
TSerDriverPacket = RECORD
Func : WORD;
IData : POINTER;
SerDriverProc : TSerDriverProc;
DriverInfo : POINTER;
CommParam : PCommParam;
FlowConType : INTEGER;
OnOff : BOOLEAN;
Status : LONGINT;
Error : LONGINT;
{ EventProc : TSerEventProc;
EventMask : WORD;
EventProcInfo : POINTER;
EventProcHandle : TSerEventProcHandle; }
Ch : CHAR;
Buf : POINTER;
Count : LONGINT;
Result : LONGINT;
END;
PSerChan = ^TSerChan;
TSerChan = RECORD
Sig : WORD;
SerDriverProc : TSerDriverProc;
SerDriverID : POINTER;
{ EventProcList : ... }
SDP : TSerDriverPacket;
END;
PSerCaps = ^TSerCaps;
TSerCaps = RECORD
A : WORD;
END;
{────────────────────────────────────────────────────────────────────────────}
Procedure VSerLowBIOSInfo( ComPort : BYTE;
Var IOPort : WORD;
Var IRQ : BYTE;
Var IntNo : BYTE );
──────────────────────────────────────────────────────────────────────────────
[FUNCTION]
Procedure VSerLowBIOSInfo( ComPort : BYTE;
Var IOPort : WORD;
Var IRQ : BYTE;
Var IntNo : BYTE );
[PARAMETERS]
ComPort Communications Port Number
IOPort VAR Returned IO Port Number
IRQ VAR Returned IRQ Number
IntNo VAR Returned Interrupt Number
[RETURNS]
Function : None
(VAR : [IOPort] IO Port Number)
(VAR : [IRQ] Returned IRQ Number)
(VAR : [IntNo] Returned Interrupt Number)
[DESCRIPTION]
[SEE-ALSO]
[EXAMPLE]